package com.hilihili.mapper;

import com.hilihili.domain.dto.DanmakuInfoDTO;
import com.hilihili.domain.dto.ShieldDanmukaDTO;
import com.hilihili.domain.entity.Danmaku;
import com.hilihili.domain.vo.DanmakuInfo;

import java.util.List;

/**
 * 评论Mapper接口
 *
 * @author xhc
 * @date 2023-11-15
 */
public interface DanmakuMapper
{

    public Long selectDanmakuCountByVideoId(Long videoId);
    /**
     * 查询评论
     *
     * @param id 评论主键
     * @return 评论
     */
    public Danmaku selectDanmakuById(Long id);

    /**
     * 查询评论列表
     *
     * @param danmaku 评论
     * @return 评论集合
     */
    public List<Danmaku> selectDanmakuList(Danmaku danmaku);

    /**
     * 新增评论
     *
     * @param danmaku 评论
     * @return 结果
     */
    public int insertDanmaku(Danmaku danmaku);

    /**
     * 修改评论
     *
     * @param danmaku 评论
     * @return 结果
     */
    public int updateDanmaku(Danmaku danmaku);

    /**
     * 删除评论
     *
     * @param id 评论主键
     * @return 结果
     */
    public int deleteDanmakuById(Long id);

    /**
     * 批量删除评论
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDanmakuByIds(Long[] ids);

    /**
     * 通过videoId获取 弹幕发送时间 > danmakuInfoDTO.time 视频弹幕
     *
     * @param danmakuInfoDTO 弹幕信息
     * @return {@link List}<{@link Danmaku}>
     */
    List<Danmaku> selectDanmakuListById(DanmakuInfoDTO danmakuInfoDTO);

    /**
     * 统计视频弹幕
     * @param id 视频Id
     * @return {@link Integer}
     */
    Integer countDanmakuById(String id);

    /**
     * 通过videoId获取 弹幕
     *
     * @param videoId 视频id
     * @return {@link List}<{@link Danmaku}>
     */
    List<DanmakuInfo> selectDanmakuListByVideoId(String videoId);

    /**
     * 向用户屏蔽其他用户弹幕表中插入信息
     * @return boolean
     */
    boolean addUserShieldDanmika(ShieldDanmukaDTO shieldDanmukaDTO);

    /**
     * 获取用户频闭用户弹幕
     * @param userId
     * @return {@link List}<{@link Long}>
     */
    List<Long> getShieldDanmukaList(Long userId);

    /**
     * 删除用户屏蔽弹幕信息
     * @param shieldDanmukaDTO
     * @return boolean
     */
    boolean deleteShieldUserDanmuka(ShieldDanmukaDTO shieldDanmukaDTO);
}
